import open_clip
import torch
from PIL import Image

# 加载模型 + tokenizer + 图像预处理
model, _, preprocess = open_clip.create_model_and_transforms(
    model_name="ViT-B-16",           # 模型架构
    pretrained="laion2b_s34b_b88k"   # 预训练权重
)

# 将模型设置为评估模式
model.eval()

# 加载图像并预处理
image = Image.open("Dragon.png")  # 替换为你的图像路径
image_input = preprocess(image).unsqueeze(0)  # 增加 batch 维度

# 提取特征向量（无需梯度）
with torch.no_grad():
    image_features = model.encode_image(image_input)

l2_distance = torch.norm(image_features - image_features, p=2, dim=-1)  # p=2 表示 L2 范数
print("L2 距离:", l2_distance.item())
# 输出特征向量（形状: [1, feature_dim]）
# print(image_features)  # 例如 torch.Size([1, 512])